package com.chenfan.mcn.model.dto;

import com.alibaba.fastjson.annotation.JSONField;
import com.chenfan.common.extension.validation.groups.Modify;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 直播红人结算单-新增/修改DTO
 *
 * @author wulg
 * @date 2023/3/21
 **/
@Data
public class LiveStarSettlementSaveDTO implements Serializable {

    private static final long serialVersionUID = 3024063026394728909L;
    /**
     * 结算单ID
     */
    @NotNull(message ="结算单ID不能为空" , groups ={Modify.class})
    private Long id;

    /**
     * 红人ID
     */
    @NotNull(message ="红人ID不能为空")
    private Long starId;

    /**
     * 单据状态：0_待提交、1_审批中、2_待打款、3_审批拒绝、4_已撤回、5_部分打款、6_已打款、9_已作废
     */
    @NotNull(message ="单据状态不能为空")
    @Range(min = 0L, max = 1L, message = "请正确标记单据状态【0-待提交，1-审批中】")
    private Integer approvalStatus;

    /**
     * 主播信息确认截图
     */
    private String confirmScreenshot;

    /**
     * 结算月份
     */
    @NotNull(message ="结算月份不能为空")
    @JSONField(format = "yyyy-MM")
    private Date settlementDate;

    /**
     * 我司财务主体id（取【公司管理】的数据）
     */
    @NotNull(message ="我司财务主体不能为空")
    private Long contractingId;

    /**
     * 附件
     */
    private String attachmentFile;

    /**
     * 费用明细(附件上传)
     */
    private String chargeAttachmentFile;

    /**
     * 备注
     */
    @Size(max = 500, message = "【备注】长度不能超过{max}个字符")
    private String remark;

    /**
     * 红人收款账号
     */
    @NotNull(message ="收款账户不能为空")
    private Long starAccountId;

    /**
     * 费用金额
     */
    @NotNull(message ="费用金额不能为空")
    @DecimalMin(value = "0")
    @Digits(integer = 10, fraction = 2, message = "【费用金额】数值必须大于等于0，其中整数位最多{integer}位，小数位最多{fraction}位")
    private BigDecimal chargeAmount;


    /**
     * 打款备注
     */
    @Size(max = 300, message = "【打款备注】长度不能超过{max}个字符")
    private String paymentRemark;

    /**
     * 关联的直播商品主键ID-数组
     */
    private List<Long> liveCommodityIdList;
}
